#ifndef ENTIDAD_H
#define ENTIDAD_H

#include "../definiciones_globales.h"
#include "../Core/Evento/Evento.h"
#include "../Core/Callback/Callback.h"
#include "../Core/Core.h"
#include "../Mapa/Mapa.h"

class Entidad
{
	public:

		/* TODO: preferiblemente que tome un struct ConfiguracionDeEntidad */
		Entidad(Mapa* _mapa, const Punto& posicion_inicial);
		
		void Mover(const Orientacion_t _orientacion);
		
		Punto Posicion() const;
		int Velocidad() const;
		Orientacion_t Orientacion() const;
		
		Evento& AlMoverse();
		Evento& AlPararse();
		
	private:

		Punto posicion;
		bool moviendo;
		Orientacion_t orientacion;
		Evento evento_al_moverse;
		Evento evento_al_pararse;
		Callback<Entidad> callback_al_finalizar_movimiento;
		const static int velocidad = 10; // TODO: que esta propiedad no sea estatica
		Mapa* mapa;

	/* funciones auxiliares */

		void ComenzarMovimiento();
		void FinalizarMovimiento();
};

#endif
